<?php

namespace login\model;


require_once("UserCredentials.php");
require_once("common/model/PHPFileStorage.php");

class UserList {
	private $adminFile;
	private $users;

	public function  __construct( ) {
		$this->users = array();

		$this->loadAdmin();
	}

	public function findUser($fromClient) {
		foreach($this->users as $user) {
			if ($user->isSame($fromClient) ) {
				\Debug::log("found User");
				return  $user;
			}
		}
		throw new \Exception("could not login, no matching user");
	}
//Toll Kod-> här skrivs vårt användar objet in till admin.php
	public function update($changedUser) {
		$this->adminFile->writeItem($changedUser->getUserName(), $changedUser->toString());
        //var_dump($changedUser->getUserName());

		\Debug::log("wrote changed user to file", true, $changedUser);
		$this->users[$changedUser->getUserName()->__toString()] = $changedUser;
	}
    // denna functionen körs på automatic. construktorn kickar igång den,
	private function loadAdmin() {
        //Toll kod-> skapar ett object utifrån phpfilestorage classen och skickar med en sökväg
		$this->adminFile = new \common\model\PHPFileStorage("data/admin.php");

        $userList = $this->adminFile->readAll();                                            //<--Här skapas en variable utifrån adminFile objectet som anropar readAll funktionen -----------------------------------------------
        //var_dump($userList);                                                             // userList är en Array och readAll() funktionen retunerar en array med innehåll från admin.php filen

        foreach ($userList as $key => $value) {                                            //<--och i for each loopen går man igenom varje rad av registrerad användare-----------------------------------------------

            $userObjects = UserCredentials::fromString($value);                             //<---Här i for each loopen skapas ett object utifrån fromString funktionen och skickar med $value----------------------------------------------
          //var_dump($value);
            $usernameNew = $userObjects->getUserName();                                     //<--skapar variable som fylls med det getuserName funktionen returnerar och det är användarnamn-----------------------------------------------
            $passwordNew = $userObjects->getPassword();                                     //<-------------------------------------------------


    		try {

                $adminUserString = $this->adminFile->readItem($usernameNew);                 //<-readItem() funktion finns i PHPFileStorage.php ------------------------------------------------
    			$admin = UserCredentials::fromString($adminUserString);                      //<---läser av varje rad nu ----------------------------------------------
                //var_dump($adminUserString);

                //$adminUserString = $this->adminFile->readItem("Admin");                    //<---Orginalet-Toll---hårdkodat för en admin användare--läste bara av en rad------???????
                //$admin = UserCredentials::fromString("Password");


    		} catch (\Exception $e) {
    			\Debug::log("Could not read file, creating new one", true, $e);

    			$userName = new UserName($usernameNew);                                      //<-ändrar innehåll till ($usernameNew)--innan stod det ("Admin");----------------------------------------------
    			$password = Password::fromCleartext($passwordNew);                           //<-ändrar innehållet till ($passwordNew)--innan stod det ("Password")----------------------------------------------
    			$admin = UserCredentials::create( $userName, $password);
    			$this->update($admin);

    		}
            // Toll kod här läggs de registrerade användarna i $users array
		    $this->users[$admin->getUserName()->__toString()] = $admin;

        }

	}
}